/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package moonnms.libs.interfaces;

import java.util.ArrayList;
import java.util.HashMap;
import moonnms.libs.libNMSMacAddrTable;
import moonnms.libs.structs.structMacAddrInfo;

/**
 *
 * @author Di_Moon
 */
public abstract class NMSSwitchContext extends NMSDeviceContext {
    // Константы
    static public int VLAN_PORT_TAGGED = 1;
    static public int VLAN_PORT_UNTAGGED = 0;
    
    // Константы состояния порта
    static public int PORT_OPERSTATUS_UP = 1;
    static public int PORT_OPERSTATUS_DOWN = 2;
    
    // Константы типов портов на устройстве
    static public int PORT_TYPE_ALL = 0;
    static public int PORT_TYPE_ETHERNET = 6;
    static public int PORT_TYPE_L2VLAN = 135;
    
    public NMSSwitchContext(String Addr) {
        super(Addr);
    };

    // Функция получения таблицы мак-адресов с устройства
    abstract public libNMSMacAddrTable getMacAddressTable();
    
    // Функция получения списка VLAN с коммутатора
    abstract public HashMap<Integer, String> getVlanTable();
    
    // Функция получения списка портов, на которых прописан vlan
    //  в возвращаемом HashMap - первое значение порт, второе значение - тип (tagged=1, untagged=0)
    abstract public HashMap<Integer, Integer> getVlanPort(int vlNum);
    
    // Функция добавления/обновления vlan на устройстве
    abstract public boolean setVlan(int vlNum, String vlName, HashMap<Integer, Integer> vlPorts);
    
    // Функция удаления vlan
    abstract public void deleteVlan(int vlNum);
    
    // Функция получения описания порта устройства
    abstract public String getPortDescription(int portNum);
    
    // Функция установки описания порта
    abstract public void setPortDescription(int portNum, String description);
    
    // Функция получения статуса порта
    abstract public int getPortOperStatus(int portNum);
    
    // Функция получения количества отправленых пакетов в порт
    abstract public long getPortOutOctets(int portNum);
    
    // Функция получения количества принятых пакетов с порта
    abstract public long getPortInOctets(int portNum);
    
    // Функция получения списка портов на устройстве по типам
    // в возвращаемом HashMap - Integer - номер порта, String - Имя порта
    abstract public HashMap<Integer, String> getPortsList(int portsType);
    
    public structMacAddrInfo findMacAddress() {
        
        libNMSMacAddrTable mactable = getMacAddressTable();
        
        return null;
    };
}
